#include <mips/regdef.h>


# MCD:
# Calcula el máximo común divisor usando el algoritmo
# de Euclides.
	.text
	.align 2
	.global mcd

mcd:
	.ent	mcd
	#
	# Creación del stack frame
	#
	.frame 	$fp, 32, ra
	subu	sp, sp, 32
	.cprestore 16
	sw		$fp, 20(sp)
	sw		ra, 24(sp)
	move 	$fp, sp

	#guardamos los dos argumentos recibidos en el argument building area del caller
	sw a0, 32($fp)
	sw a1, 36($fp)

	#
	# Cálculo del Máximo Común Divisor
	#
	beqz	a1, return
	rem		t0, a0, a1   	#t0 = a0 % a1
	move 	a0, a1
	move	a1, t0
	jal		mcd
	b		fin
return: #salida (se cumplio la condicion de corte)
	move	v0, a0
fin:
	#
	# Liberación del stack frame
	#
	#restauramos los argumentos
	lw a0, 32($fp)
	lw a1, 36($fp)

	move 	sp, $fp
	lw		ra, 24(sp)
	lw		$fp, 20(sp)
	addu	sp, sp, 32
	jr ra
	.end	mcd
